package reflect.annotations;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunMethod {

    /*
    为注释添加参数
    格式：
    类型 参数名() [default 默认值]

    例如：
    int value();
    当这样定义后，当前注释就支持传入一个int行的参数

    外面在使用注解时key传参
    @AutoRunMethod(11)   此时value参数的值为11

    在定义参数的同时key为该参数指定默认值：
    int value() defalut 1;

    如果参数指定了默认值，那么在使用该注释时就不强制要求必须传参了，此时如果不传参到当前参数使用默认值：
    @AutoRunMethod(11)  此时value参数的值为11
    @AutoRunMethod      此时value参数的值使用默认值为1


    注：
    如果注解仅定义了一个参数时，参数名尽量选取为"value",如果指定为别的名字，那么在
    使用注解传参时会麻烦
    结合多个参数说明传参语法：
     @注解名(参数1=对应值,参数2=对应值)  这里参数的顺序可以与注解中定义参数的顺序不一致
        例如:
        在AutoRunMethod注解中定义了两个参数:
         int age();
         String name();

         在使用注解时，传参如下:
         @AutoRunMethod(age=11,name="张三")
         @AutoRunMethod(name="李四",age=22)


       对于只有一个参数时:
       如果注解仅定义了一个参数时，参数名如果不叫"value"，那么传参时:参数名=参数值
       例如，注解定义参数:
       int num() default 1;
       使用时传参:
       @AutoRunMethod(num=22)

       如果只有一个参数，且参数名为"value"，那么传参时:
       @AutoRunMethod(22)   可以省去参数名

       注意:上述省略参数名的情况仅限于注解定义了一个参数时，如果包含多个参数时，在传参时每个参数名都不可以忽略
       例如:
       int value() default 1;
       String name();
       在使用注解时:
       @AutoRunMethod(value=22,name="XXXX")  可以的
       @AutoRunMethod(name="XXXX",value=22)  可以的
       @AutoRunMethod(22,name="XXXX")        不可以，此时value的参数名不可以忽略！！
     */
    int value() default 1;

//    int age() default 22;
//    String name();



}
